AWS IAMで特定のリージョンのみアクセス可能なIAMユーザーを作成してみた
もしかして、AWSコンソールページで作業をする時にいつの間にか他のリージョンに変更されていたりする経験ありますか?
昔にリージョンが変更されているのを知らなくて作成したリソースがなくなったと思って、困った時がありました。
それで特定のリージョンのみ使用するのであれば、リージョンが変更されて何かミスが発生しないようにIAMを使用してリージョンに対する権限を許可、制限する方法をまとめました。
IAMユーザーの作成
まずは、AWSコンソールでIAMページに移動して新しいユーザーを作成します。
IAMのユーザーページに入って新しいIAMユーザーを作成します。
設定内容は下記のようにします。
コンソールパスワードの設定は自由にしても問題ないですが、ブログではデフォルト値で設定します。
- ユーザー名:
任意
(ex.region-user) AWS マネジメントコンソールへのユーザーアクセスを提供する - オプション
にチェック自動生成されたパスワード
を選択(デフォルト値)ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります - 推奨
にチェック(デフォルト値)
次のステップで権限の設定はできますが、一旦は何の設定もしないまま次のページに行きます。
最後に確認のページで設定した内容が確認できます。
「許可の概要」には権限の設定を何もしてないので、リソースなし
になっているはずです。
設定したことに問題がなければユーザーを作成します。
IAMユーザーが作成されると、ログイン情報が表示されます。
右下の.csv ファイルをダウンロード
で .csv ファイルでもダウンロードできます。
ここで表示されたログイン情報は二度と確認できないので、 ファイルで保存しておくのを推奨します。
表示されている情報でコンソールにログインする予定なので、必ず記憶しておきましょう。
ユーザーリストに作成したIAMユーザーが追加されました。
作成したIAMユーザーでログイン
作成したIAMユーザーには何の権限も付与してないので、ログインしてもできることは何もないですが、一旦ログインしてみます。
上で保存したログイン情報の中でサインインURLをブラウザで検索します。
そうすると、ログインページが表示されます。
アカウント ID (12 桁) またはアカウントエイリアス
にはすでにアカウントIDが入力されているはずです。(なかったら入力してください)
ユーザー名とパスワードを入力してログインをします。
ログインをすると、パスワードを変更する画面が表示されます。(ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります - 推奨
をチェックしたので)
初回ログインの時に表示される画面で、実際に使用するパスワードに設定してログインを進めます。
ログインすると、コンソール画面が出ます。
しかし、権限がないので、画面のいろんなところに 「アクセス拒否」 と表示されています。
VPC ページに入ってみても権限がないので何も確認できません。
権限付与
ログインされることまで確認できたら、今回はIAMユーザーに権限を付与してみます。
IAMユーザーからログアウトしてIAMユーザーの作成に使用したユーザーにログインして作業します。
全ても権限は JSON 形式で作成しました。
東京リージョンのみ操作可能な権限
まずは東京リージョンのみアクセス可能にする権限を作成してみます。
東京リージョンにある全てのサービスは操作できますが、他のリージョンでは操作できないです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
}
]
}
IAMユーザーにログインして確認してみると、権限で設定したように東京リージョンにはアクセスできますが、他のリージョンにはエラーが表示されます。
<東京リージョン↓>
<バージニア北部リージョン↓>
以下の例からは結果確認は省略します。
東京とバージニア北部リージョンに操作可能な権限
今回は複数リージョン(東京リージョンとバージニア北部リージョン)の操作だけを許可する権限です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:RequestedRegion": [
"ap-northeast-1",
"us-east-1"
]
}
}
}
]
}
逆にバージニア北部のみ操作できない権限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "us-east-1"
}
}
},
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
東京リージョンの特定サービスのみ操作可能な権限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
},
{
"Effect": "Allow",
"Action": "elasticloadbalancing:Describe*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
},
{
"Effect": "Allow",
"Action": [
"cloudwatch:ListMetrics",
"cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
},
{
"Effect": "Allow",
"Action": "autoscaling:Describe*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
}
]
}
まとめ
このようにIAMユーザーに権限を付与することで特定のリージョンのみアクセスすることができます。
AWSを使いながら特定のリージョンだけを使いたい場合や、逆に特定のリージョンへのアクセスを制限したい場合には、リージョン権限を設定したIAMユーザーを使ってみるのはいかがでしょうか。